package com.zf.easyexcel.utils;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;

/**
 * 样式工具
 *
 * @author Zhou Feng
 */
public class StyleUtils {

    /**
     * 给单元格设置批注
     *
     * @param sheet          单元格所在的sheet
     * @param cell           单元格
     * @param commentContent 批注内容
     * @param width          批注的宽度（几列）
     * @param height         批注的高度（几行）
     */
    public static void addComment(Sheet sheet, Cell cell, String commentContent, int width, int height) {
        int columnIndex = cell.getColumnIndex();
        int rowIndex = cell.getRowIndex();

        // 创建绘图
        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
        // 创建锚点：也就是批注的展示大小范围
        // XSSFClientAnchor的后四位参数：左上角所在的列行坐标(col1,row1),右下角所在的列行坐标(col2,row2)，这个框内就是批注的大小范围，当锚点被用来设置批注时，只有大小范围有效，批注位置都是在单元格右上角
        // XSSFClientAnchor的前四位参数，用来对后四位参数的微调：左上角坐标列行偏移量(dx1,dy1),右下角坐标列行偏移量(dx2,dy2)，一般不需要偏移，都设置为0
        // XSSFClientAnchor(500*255, 500*255, 1000*255, 1000*255, columnIndex, rowIndex, columnIndex + 2, rowIndex + 1);
        XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, columnIndex, rowIndex, columnIndex + width, rowIndex + height);
        // 在此锚点出创建一个批注对象
        Comment comment = drawingPatriarch.createCellComment(anchor);
        // 写入批注信息
        comment.setString(new XSSFRichTextString(commentContent));
        // 将批注设置给对应的单元格
        cell.setCellComment(comment);
    }


    /**
     * 在sheet的指定位置嵌入图片
     *
     * @param sheet            嵌入到的sheet
     * @param picBytes         图片的字节
     * @param picType          图片的类型，参考 {@link Workbook#PICTURE_TYPE_PNG}
     * @param startColumnIndex 图片嵌入位置的左上角的 列位置，从0开始
     * @param startRowIndex    图片嵌入位置的左上角的 行位置，从0开始
     * @param width            嵌入图片要占据的宽度（几列）
     * @param height           嵌入图片要占据的高度（几行）
     */
    public static void addPic(Sheet sheet, byte[] picBytes, int picType, int startColumnIndex, int startRowIndex, int width, int height) {
        Workbook workbook = sheet.getWorkbook();
        // 创建绘图
        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
        // 创建锚点：也就是图片展示位置和大小范围
        // XSSFClientAnchor的后四位参数：左上角所在的列行坐标(col1,row1),右下角所在的列行坐标(col2,row2)，这个框内就是锚点的位置和大小范围，
        // XSSFClientAnchor的前四位参数，用来对后四位参数的微调：左上角坐标列行偏移量(dx1,dy1),右下角坐标列行偏移量(dx2,dy2)，一般不需要偏移，都设置为0
        XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, startColumnIndex, startRowIndex, startColumnIndex + width, startRowIndex + height);
        // 嵌入图片
        drawingPatriarch.createPicture(anchor, workbook.addPicture(picBytes, picType));
    }


}
